Problem
【SDOI2016】数字配对
Description
有  种数字,第  种数字是 、有  个,权值是 。
若两个数字  满足, 是  的倍数,且  是一个质数,那么这两个数字可以配对,并获得  的价值。
一个数字只能参与一次配对,可以不参与配对。
在获得的价值总和不小于  的前提下,求最多进行多少次配对。
Input
第一行一个整数 。
第二行  个整数 。
第三行  个整数。
第四行  个整数 。
Output
Sample Input
| 1 | 3 | 
Sample Output
| 1 | 4 | 
HINT
标签:费用流
Solution
比较难想的二分图建模。
记为分解质因数后的项数(算两项),为质数的充要条件为。
可知奇偶性相同的一定不能配对,所以可建二分图,为奇在一边,为偶在另一边。
两边间连边则看是否有整除条件,流量为,费用为。
把每个点拆成左右两个点,左边与源点相连,右边与汇点相连,容量为 ,费用为零。
跑费用流每增广一次就判一下是否费用小于 ,注意最后退出的时候不要把新加入的流全退完,退一部分至刚好大于等于即可。
Code
| 1 | 
 |